
//关于迭代器
{
    // //关于Iterator接口到底是什么东西
    
    // //先声明一个数组
    // let arr=['hello','world'];
    // //调用Itorator接口,这个例子中,数组内部已经实现了这个接口了,我们直接调用就行了
    // let map=arr[Symbol.iterator]();
    // //这个map有一个方法是next()
    // console.log(map.next());
    // console.log(map.next());
    // console.log(map.next());
}

{
    //自定义迭代器
    //obj并没有给我们定义迭代器,不过数组是有规律的
    //普通对象是没有规律的,所以没有迭代器接口
    //所以我们要自定义Iterator接口

    //现在我们要求,先遍历start当中的数组,在遍历end当中的元素
    let obj={
        start:[1,2,3],
        end:[7,9,8],
        //这里我们就是声明了一个iterator接口的方法(中括号里面放的就是表达式)
        [Symbol.iterator](){
            let self=this;
            let index=0;
            let arr=self.start.concat(self.end);
            let len=arr.length;
            //这个方法最后要返回一个对象
            //这个对象一定要有next的方法的
            return{
                //这个next就是要写怎么遍历的过程.
                next(){
                    //当前的索引小于数组的长度的时候,返回当前的值就可以了
                    if(index<len){
                        //这个你可以看看上面的例子,返回的对象都是一样的
                        return{
                            value:arr[index++],
                            done:false
                        }
                    }else{
                        return{
                            value:arr[index++],
                            done:true
                        }
                    }
                }
            }
        }
        
    }

    for (const v of obj) {
        console.log(v);
    }

}





